package ycl.scheduled.common.utils;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;

import java.util.Collection;
import java.util.HashSet;
import java.util.Map;

/**
 * 集合字符串互相转换工具
 *
 * @author: YCL
 * @date: 2021-06-15 13:17:42
 */
@SuppressWarnings("all")
public class CollStrUtil {

	private final static String COLL_INIT_STRING = "[]";
	private final static String MAP_INIT_STRING = "{}";


	/**
	 * 集合转字符串
	 *
	 * @param c 任意类型集合
	 * @return 字符串
	 */
	public static <T> String collToString(Collection<T> c) {
		if (CollUtil.isEmpty(c))
			return COLL_INIT_STRING;
		return JSONObject.toJSONString(c);
	}


	/**
	 * 字符串转集合
	 *
	 * @param s   字符串
	 * @param c   目标类型集合
	 * @param <T> 目标类型
	 * @return 集合
	 */
	public static <T> Collection<T> stringToColl(String s, Class<? extends Collection<T>> c) {
		if (StrUtil.isBlank(s) || COLL_INIT_STRING.equals(s))
			return new HashSet<>();
		return JSONObject.parseObject(s, c);
	}

	/**
	 * Map集合转字符串
	 *
	 * @param map map集合
	 * @return 字符串
	 */
	public static String mapToString(Map<Object, Object> map) {
		if (CollUtil.isEmpty(map))
			return MAP_INIT_STRING;
		return JSONObject.toJSONString(map);
	}


	/**
	 * 字符串转集合
	 *
	 * @param s   字符串
	 * @param m   想要转成的map集合类型
	 * @param <K> map的key
	 * @param <V> map的value
	 * @return 想要转成的map集合
	 */
	public static <K, V> Map<K, V> stringToMap(String s, Class<? extends Map<K, V>> m) {
		if (StrUtil.isBlank(s) || MAP_INIT_STRING.equals(s))
			return Maps.newHashMap();
		return JSONObject.parseObject(s, m);
	}
}
